SET NOCOUNT ON
-- CREATE INDEX IX_TRB_DIVIDA_LIVRO ON TRB_DIVIDA ( DIV_COD, EXE_ANO, PLA_COD, IMV_COD, PES_COD_EMPRESA, PES_COD_CONTRIBUINTE )

-- PARAMETROS DE ENTRADA
DECLARE   @EANO_COD INT 
		, @DTLANCAMENTO	DATETIME		

SELECT    @EANO_COD = 2003
		, @DTLANCAMENTO = CONVERT( DATETIME, '02/01/2008', 102)

-- VARIAVEIS
DECLARE @DIV_COD 				INT,
		@DIV_VALOR_ORIGINAL		REAL,
		@DIV_DATA_VENCTO		DATETIME,
		@DIV_TIPO				CHAR(1),
		@EXE_ANO				INT,
		@IMV_COD				INT,
		@PES_COD_EMPRESA		INT,
		@PES_COD_CONTRIBUINTE 	INT

DECLARE @VLCORRECAO 	MONEY
		, @VLJUROS		MONEY
		, @VLMULTA		MONEY
		, @VLHONORARIO 	MONEY
		, @VLATUALIZADO	MONEY

DECLARE @INSCRICAO VARCHAR(30)
		, @NOME VARCHAR(100)

DECLARE @LVI_COD INT
		, @LVI_NUMERO INT

SELECT @LVI_NUMERO = COALESCE( MAX( LVI_NUMERO ), 0) + 1 FROM TRB_LIVRO_DIVIDA WHERE EXE_ANO = 2007

INSERT INTO TRB_LIVRO_DIVIDA
(
	  EXE_ANO
	, LVI_NUMERO
	, LVI_DATA_GERACAO
	, LVI_ANO_INICIAL
	, LVI_ANO_FINAL
	, LVI_SITUACAO
	, LVI_DATA_BASE_CORRECAO
	, LVI_HONORARIO
	, LVI_OBSERVACAO
)
VALUES
(
	  2007
	, @LVI_NUMERO
	, CONVERT( DATETIME, '02/15/2008', 102)
	, @EANO_COD
	, 2007
	, 'N'
	, @DTLANCAMENTO
	, NULL 
	, 'TESTE SP'
)

SELECT @LVI_COD = @@IDENTITY

-- PARA CALCULAR FOLHA, LINHA, SEQUENCIA
DECLARE @FOLHA 			INT
		, @SEQUENCIA 	INT
		, @LINHA		INT

-- INICIALIZA
SELECT 	  @FOLHA 		= 1
		, @SEQUENCIA 	= 1
		, @LINHA		= 1

DECLARE @DIVIDAS CURSOR
SET @DIVIDAS = CURSOR FOR SELECT
	  TRB_DIVIDA.DIV_COD,
	  TRB_DIVIDA.DIV_VALOR_ORIGINAL,
	  TRB_DIVIDA.DIV_DATA_VENCTO,
	  TRB_DIVIDA.DIV_TIPO,
	  TRB_DIVIDA.EXE_ANO,
	  TRB_DIVIDA.IMV_COD,
	  TRB_DIVIDA.PES_COD_EMPRESA,
	  TRB_DIVIDA.PES_COD_CONTRIBUINTE
	FROM TRB_DIVIDA 
		LEFT JOIN TRB_ITEM_PARCELAMENTO ON TRB_ITEM_PARCELAMENTO.DIV_COD 	= TRB_DIVIDA.DIV_COD
		LEFT JOIN TRB_PARCELAMENTO 		ON TRB_PARCELAMENTO.TLA_COD 		= TRB_ITEM_PARCELAMENTO.TLA_COD
		LEFT JOIN TRB_EMPRESA 			ON TRB_EMPRESA.PES_COD_EMPRESA 		= TRB_DIVIDA.PES_COD_EMPRESA
		LEFT JOIN TRB_IMOVEL 			ON TRB_IMOVEL.IMV_COD 				= TRB_DIVIDA.IMV_COD
		LEFT JOIN GER_PESSOA 			ON GER_PESSOA.PES_COD				= TRB_DIVIDA.PES_COD_CONTRIBUINTE
	WHERE
		( (TRB_DIVIDA.EXE_ANO >= @EANO_COD AND TRB_DIVIDA.DIV_SITUACAO = 'N') OR (DIV_EXECUCAO = 'S') )
		AND
		( ( TRB_PARCELAMENTO.PRC_FORMA_PAGTO IS NULL ) OR 
          ( TRB_PARCELAMENTO.PRC_FORMA_PAGTO = 'V' AND NOT EXISTS( SELECT 1 FROM TRB_BAIXA B JOIN TRB_LANCAMENTO L ON L.LAN_COD = B.LAN_COD WHERE L.TLA_COD = TRB_PARCELAMENTO.TLA_COD ) ) )
	ORDER BY
		  TRB_DIVIDA.EXE_ANO
		, TRB_DIVIDA.PLA_COD
		, IMV_INSCRICAO
		, EMP_INSCRICAO
		, TRB_DIVIDA.PES_COD_CONTRIBUINTE

OPEN @DIVIDAS 
FETCH NEXT FROM @DIVIDAS 
		INTO @DIV_COD, @DIV_VALOR_ORIGINAL, @DIV_DATA_VENCTO, @DIV_TIPO, @EXE_ANO, @IMV_COD, @PES_COD_EMPRESA, @PES_COD_CONTRIBUINTE

WHILE @@FETCH_STATUS = 0 
BEGIN
	-- OBTEM DADOS CORRIGIDOS	
	SELECT    @VLCORRECAO = VLCORRECAO
			, @VLJUROS = VLJUROS
			, @VLMULTA = VLMULTA
			, @VLHONORARIO = VLHONORARIO
			, @VLATUALIZADO = VLATUALIZADO
		FROM DBO.CALCULOCORRECAO_LIVRO( @DTLANCAMENTO, @DIV_DATA_VENCTO, @DIV_VALOR_ORIGINAL, 0, 12)
	
	IF @DIV_TIPO = 'I'
		SELECT  @INSCRICAO 	= TRB_IMOVEL.IMV_INSCRICAO,
  				@NOME 		= GER_PESSOA.PES_NOME 
		FROM TRB_IMOVEL 
		INNER JOIN GER_PESSOA ON TRB_IMOVEL.PES_COD_PROPRIETARIO = GER_PESSOA.PES_COD
		WHERE TRB_IMOVEL.IMV_COD = @IMV_COD
	ELSE	
	IF @DIV_TIPO = 'E'
		SELECT  @INSCRICAO	= CAST(TRB_EMPRESA.EMP_INSCRICAO AS SYSNAME),
				@NOME 		= GER_PESSOA.PES_NOME
			FROM GER_PESSOA 
			INNER JOIN TRB_EMPRESA ON TRB_EMPRESA.PES_COD_EMPRESA = GER_PESSOA.PES_COD
			WHERE TRB_EMPRESA.PES_COD_EMPRESA = @PES_COD_EMPRESA	
	ELSE	
	IF @DIV_TIPO = 'C'
		SELECT  @INSCRICAO	= COALESCE(GER_PESSOA_FISICA.PFI_CPF, '') + COALESCE(GER_PESSOA_JURIDICA.PJU_CNJP, ''), 
				@NOME = GER_PESSOA.PES_NOME
			FROM GER_PESSOA 
			LEFT JOIN GER_PESSOA_FISICA 	ON GER_PESSOA.PES_COD = GER_PESSOA_FISICA.PES_COD 
			LEFT JOIN GER_PESSOA_JURIDICA 	ON GER_PESSOA.PES_COD = GER_PESSOA_JURIDICA.PES_COD
			WHERE GER_PESSOA.PES_COD = @PES_COD_CONTRIBUINTE
	
	-- CALCULA FOLHA
	
	-- CALCULA SEQUENCIA
	SET @LINHA = @LINHA + 1
	
	IF @LINHA % 50 = 0
	BEGIN
		SET @LINHA = 1
		SET @FOLHA = @FOLHA + 1
	END
	
	SET @SEQUENCIA = @SEQUENCIA + 1
	
	-- ADICIONA REGISTRO NO ITEM
	INSERT INTO TRB_ITEM_LIVRO_DIVIDA
	(
		LVI_COD,
		DIV_COD,
		EXE_ANO,
		ILI_FOLHA,
		ILI_SEQUENCIA,
		ILI_INSCRICAO,
		ILI_PROPRIETARIO,
		ILI_VALOR,
		ILI_CORRECAO_MONETARIA,
		ILI_JUROS,
		ILI_MULTA_MORA,
		ILI_HONORARIO
	)
	VALUES
	(
		@LVI_COD,
		@DIV_COD,
		@EXE_ANO,
		@FOLHA,
		@SEQUENCIA,
		@INSCRICAO,
		@NOME,
		@DIV_VALOR_ORIGINAL,
		@VLCORRECAO,
		@VLJUROS,
		@VLMULTA,
		@VLHONORARIO
	)
	
	FETCH NEXT FROM @DIVIDAS 
			INTO @DIV_COD, @DIV_VALOR_ORIGINAL, @DIV_DATA_VENCTO, @DIV_TIPO, @EXE_ANO, @IMV_COD, @PES_COD_EMPRESA, @PES_COD_CONTRIBUINTE
END

CLOSE @DIVIDAS 
DEALLOCATE @DIVIDAS 
